//
//  CZVisitor.swift
//  Weibo24
//
//  Created by apple on 16/2/24.
//  Copyright © 2016年 apple. All rights reserved.
//

import UIKit
import SnapKit

/*
    三者的区别:
        通知:1.通知只是一个发送,不涉及回馈
            2.一对多,也可以一对一
            3.可以夸控制器传值
            通知的步骤: 1. 注册一个通知,2,发送一个通知,3.接收通知处理的响应,4.注销(移除)通知
        代理和闭包:
            1.一对一
            2.必需设置代理属性
            3.用代理的地方,大部分都可以用闭包代替;用闭包的地方,大部分都可以用代理代理

    什么时候用代理,什么时候用闭包,什么使用通知?

    A -> B -> C ,
    1. 需要把C控制器的数据返回给B  -> 闭包/代理/通知
    2. 需要C把数据直接传递给A     ->  通知
*/

/*
    1.定义协议用 protocol
    2.协议继承自 NSObjectProtocol
    3.用 weak 来修饰代理属性
*/
protocol CZVisitorDelegate: NSObjectProtocol{
    
    //定义方法
    func didLogin()
    
    func didRegister()

}

class CZVisitor: UIView {

    // 设置代理属性
    weak var delegate: CZVisitorDelegate?
    
    //第一部:重写构造函数
    override init(frame: CGRect) {
        super.init(frame: frame)
        
        backgroundColor = UIColor(white: 237/255.0, alpha: 1)
        
        setupUI()
    }

    required init?(coder aDecoder: NSCoder) {
        fatalError("init(coder:) has not been implemented")
    }
    
    
    
    //第二部:创建一个私有方法,来添加视图和设置约束
    func setupUI(){
    
        //添加控件
        addSubview(homeIconImageView)
        //添加遮罩视图
        addSubview(maskImageView)
        addSubview(iconImageView)
        addSubview(messageLabel)
        addSubview(registerButton)
        addSubview(loginButton)
        
        
        //添加约束
        //转动动画居中对齐
        homeIconImageView.snp_makeConstraints { (make) -> Void in
            make.center.equalTo(self.snp_center)
        }
        //
        iconImageView.snp_makeConstraints { (make) -> Void in
            make.center.equalTo(self.snp_center)
        }
        
        //添加提示label -- 距离上边就是homeIconImageView
        // 距离中间
        // 宽的约束 216
        messageLabel.snp_makeConstraints { (make) -> Void in
         
            //距离动画视图的底部+ 10的间距
            make.top.equalTo(homeIconImageView.snp_bottom).offset(10)
            make.centerX.equalTo(self.snp_centerX)
            
            //
            make.width.equalTo(216)
        }
        
        //注册按钮
        /*
            距离左边是 -messageLabel的左边
            上边是 messageLabel的底部
            宽100 高30
        */
        
        registerButton.snp_makeConstraints { (make) -> Void in
            make.left.equalTo(messageLabel.snp_left)
            make.top.equalTo(messageLabel.snp_bottom).offset(10)
            
            make.width.equalTo(100)
            make.height.equalTo(30)

        }
        
        loginButton.snp_makeConstraints { (make) -> Void in
            make.right.equalTo(messageLabel.snp_right)
            make.top.equalTo(messageLabel.snp_bottom).offset(10)
            
            make.width.equalTo(100)
            make.height.equalTo(30)
        }
        
        //添加遮罩视图的约束
        maskImageView.snp_makeConstraints { (make) -> Void in
            make.center.equalTo(self.snp_center)
        }
    }
    
    //添加动画
    func startAnimation(){
    
        //千万不要输错了!
        let animation = CABasicAnimation(keyPath: "transform.rotation")
        
        animation.toValue = 2 * M_2_PI
        
        animation.repeatCount = MAXFLOAT
        
        animation.duration = 5
        //切换视图的时候,保证动画不要被移除
        animation.removedOnCompletion = false
        
        //添加到
        homeIconImageView.layer.addAnimation(animation, forKey: nil)
        
    }
    
    //对外提供一个方法
     func setInfo(message: String,image: String,animation: Bool){
    
        messageLabel.text = message
        iconImageView.image = UIImage(named: image)
        
        //如果有动画我们就让他显示,并且执行
        if animation {
            
            homeIconImageView.hidden = false
            startAnimation()
            
        } else {
            homeIconImageView.hidden = true
            //可以移除
        }
        
    }
    
    //MARK:--按钮点击方法
    func login(){
    
        //跳转页面
        /*
            1.代理 -> 先定义一个协议 -> 定义方法 -> 设置代理属性 -> 设置代理 -> 遵循协议,实现代理方法
            2.闭包
            3.通知
        */
        
        delegate?.didLogin()
    }
    
    func register(){
        
        // 调用
        
        /*
            OC里需要判断,有没有类实现了这个协议
            Swift里 delegate 是一个可选的, 有可能有值,也没有值
            delegate如果有值,说明:肯定 有类实现了代理方法
            delegate如果没有值, nil调用方法,没有任何作用,也不会崩溃
        */
        
        delegate?.didRegister()
        
    }
    
    //第三部: 懒加载
    //首页动画图片
   private lazy var homeIconImageView: UIImageView = {
    
        let img = UIImageView()
        
        img.image = UIImage(named: "visitordiscover_feed_image_smallicon")
        
        return img
        
    }()
    //通用的图片
   private lazy var iconImageView: UIImageView = {
    
        let img = UIImageView()
        
        img.image = UIImage(named: "visitordiscover_feed_image_house")
        
        return img
        
    }()
    
    //提示语
   private lazy var messageLabel: UILabel = {
    
        let label = UILabel()
    
        // 设置属性
        label.font = UIFont.systemFontOfSize(14)
        label.textColor = UIColor.darkGrayColor()
        
        label.numberOfLines = 0
        
        label.textAlignment = .Center
        
        label.text = "关注一些人，回这里看看有什么惊喜"
        
        return label
    }()
    
    //注册按钮
   private lazy var registerButton: UIButton = {
    
        let button = UIButton(type: UIButtonType.Custom)
        
        button.setBackgroundImage(UIImage(named: "common_button_white_disable"), forState: UIControlState.Normal)
        
        button.setTitle("注册", forState: UIControlState.Normal)
        
        button.setTitleColor(UIColor.orangeColor(), forState: UIControlState.Normal)
        
        button.addTarget(self, action: "register", forControlEvents: UIControlEvents.TouchUpInside)
        
        
        return button
        
    }()
    
    //登陆
   private lazy var loginButton: UIButton = {
        
        let button = UIButton(type: UIButtonType.Custom)
        
        button.setBackgroundImage(UIImage(named: "common_button_white_disable"), forState: UIControlState.Normal)
        
        button.setTitle("登陆", forState: UIControlState.Normal)
        
        button.setTitleColor(UIColor.darkGrayColor(), forState: UIControlState.Normal)
        
        button.addTarget(self, action: "login", forControlEvents: UIControlEvents.TouchUpInside)
        
        
        return button
        
    }()

    //遮罩视图
   private lazy var maskImageView: UIImageView = {
    
        let img = UIImageView()
        
        img.image = UIImage(named: "visitordiscover_feed_mask_smallicon")
        
        return img
    }()

}
